/*
    编程找出1000以内所有完数并打印。
*/
public class PerfectNumber {

    public static void main(String[] args) {

        System.out.println("1000以内的所有完数为：");
        // 1.使用外层for循环遍历2到1000之间的所有整数。1不是完数，所以从2开始。
        for(int i = 2; i <= 1000; i++) {

            // 2.使用内层for循环对每一个i值查找其所有真因子并进行累加。
            int sum = 0;                       // 声明一个变量记录i所有真因子的和并初始化
            for(int j = 1; j <= i / 2; j++) {  // 一个数的真因子不会超过其二分之一，故只需让j最多取到i的二分之一
                if(0 == i % j) {
                    sum += j;
                }
            }
            if(i == sum) {                     // 如果i的值等于其所有真因子的和，即i是完数，则打印i，否则不打印
                System.out.print(i + " ");
            }
        }
        System.out.println();                  
    }
}